%%html
<style>
table {margin-left: 0 !important;}
</style>
(até 4 integrantes)
| Github | Nome | Matricula | |
|---|---|---|---|
| Daniel Campos | A57635769 | daniel.ferraz.campos@gmail.com | |
| Leandro Daniel | A57622988 | contato@leandrodaniel.com | |
| Rodrigo Goncalves | A57566093 | rodrigo.goncalves@me.com | |
| Ygor Lima | A57549661 | ygor_redesocial@hotmail.com |
Escolha um dentre os seguintes datasets:
Para o dataset escolhido, deve-se:
a. Gerar plots que permitam tirar conclusões claras dos dados (a questão deve ser suficientemente complexa para que exija minimamente dois gráficos distintos complementares).
b. Os gráficos devem ser interpretados e discutidos, e as conclusões acerca dos mesmos e das questões de negócio devem ser apresentadas
O trabalho deverá ser desenvolvido em Jupyter notebook e deverá ser entregue na data combinada com o professor em formato .ipynb já rodado e com outputs salvos no arquivo entregue. Organize o documento de modo que ele esteja dividido nas 6 seções propostas acima.
Escolhemos trabalhar com o dataset fornecido referente ao histórico de preços de combustíveis de 2004 a 2019.
A ANP (Agencia Nacional de Petróleo) publica semanalmente relatórios de Gás, Diesel e outros combustíveis usados no país.
Esta publicação traz o valor médio, mínimo e máximo, de revenda e distribuição, por unidade de medida padrão de cada combustível, agrupados por região e unidade da federação.
O conjunto de dados apresenta os preços de revenda e distribuiçao, (médio, mínimo e máximo), em periodicidade semanal para os seguintes produtos:
Além dos preços de revenda e distribuiçao, (médio, mínimo e máximo), o conjunto de dados apresneta algumas informações adicionais:
Avaliar o comportamentos dos preços de combustíveis considerando informacões adicionais como cotação internacional do barril de petroleo, localidade, movimentações políticas internas e alterações da política de preços praticados pela Petrobras.
Vamos iniciar pela importação dos dados em um pandas dataframe.
Neste passo nos preocupamos de definir os nomes das variáveis bem como o correto data type de cada coluna.
import pandas as pd
import numpy as np
pd.set_option('display.max_rows', 30)
pd.set_option('display.max_columns', 30)
pd.set_option("display.precision", 3)
pd.set_option('display.expand_frame_repr', False)
dtype = {'INDEX': np.int32,
'DATA INICIAL': np.object,
'DATA FINAL': np.object,
'REGIÃO': 'category',
'ESTADO': 'category',
'PRODUTO': 'category',
'NÚMERO DE POSTSOS PESQUISADOS': np.int32,
'UINDADE DE MEDIDA': 'category',
'PREÇO MÉDIO REVENDA': np.float64,
'DESVIO PADRÃO REVENDA': np.float64,
'PRECO MÍNIMO REVENDA': np.float64,
'PRECO MÁXIMO REVENDA': np.float64,
'MARGEM MÉDIA REVENDA': np.float64,
'COEF DE VARIAÇÃO REVENDA': np.float64,
'PREÇO MÉDIO DISTRIBUIÇÃO': np.float64,
'DESVIO PADRÃO DISTRIBUIÇÃO': np.float64,
'PREÇO MÍNIMO DISTRIBUIÇÃO': np.float64,
'PREÇO MÁXIMO DISTRIBUIÇÃO': np.float64,
'COEF DE VARIAÇÃO DISTRIBUIÇÃO': np.float64}
df_prices = pd.read_csv('https://raw.githubusercontent.com/ldaniel/Advanced-Statistical-Modelling/master/data/raw/data_gasPricesBR_2004-2019.tsv',
sep = '\t',
dtype = dtype,
names = list(dtype),
skiprows = 1,
usecols = list(dtype),
index_col = 'INDEX',
na_values = ['-'],
parse_dates = ['DATA INICIAL', 'DATA FINAL'])
df_prices.head()
#!conda install -c conda-forge pandas-profiling=2.3.0
import pandas_profiling as pp
%%time
profile = df_prices.profile_report(style = {'full_width':True}, title = 'Brasil Histórico de Preços de Combustíveis',
check_recoded = False,
check_correlation_pearson = False,
check_correlation_cramers = False,
missing_diagrams = {
'bar': False,
'matrix': False,
'heatmap': False,
'dendrogram': False})
profile
Agora podemos enriquecer os dados extraindo da DATA INICIAL informações como ano, mês e semana.
df_prices['ANO'] = pd.DatetimeIndex(df_prices['DATA_INICIAL']).year
df_prices['MES'] = pd.DatetimeIndex(df_prices['DATA_INICIAL']).month
df_prices['SEMANA'] = pd.DatetimeIndex(df_prices['DATA_INICIAL']).week
df_prices[['DATA_INICIAL', 'DATA_FINAL', 'ANO', 'MES', 'SEMANA']]
Vamos avaliar algumas características dos dados importados, como data types de cada variável, missing values,
df_prices.info()
Como podemos perceber temos alguns valores faltantes para algumas variáveis
df_prices.isnull().sum(axis = 0)
# Diversas estatísticas da base
df_prices.describe()
#Mostra todas os produtos da base
df_prices['PRODUTO'].unique()
Como exemplo podemos avaliar a evolução da média semanal anual dos preços de REVENDA e DISTRIBUIÇÃO da GASOLINA COMUM no estado de SAO PAULO
df_gas_sp = df_prices[(df_prices['PRODUTO'] == 'GASOLINA COMUM') &
(df_prices['ESTADO'] == 'SAO PAULO')].groupby(['PRODUTO', 'ESTADO', 'ANO'])
df_gas_sp[['ANO','PREÇO_MÉDIO_REVENDA', 'PREÇO_MÉDIO_DISTRIBUIÇÃO']].describe(include = [np.float64])
Podemos visualizar os dados utilizando um gráfico de linha para um determinado ESTADO e PRODUTO.
%matplotlib inline
import matplotlib.pyplot as plt
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()
plt.style.use('default')
plt.rcParams["figure.figsize"] = (10, 5)
plt.rcParams.update({'font.size': 10})
df_plot = df_prices[(df_prices['PRODUTO'] == 'GASOLINA COMUM') &
(df_prices['ESTADO'] == 'SAO PAULO')]
x = df_plot['DATA_INICIAL']
y = df_plot['PREÇO_MÉDIO_REVENDA']
fig, ax = plt.subplots()
ax.plot(x, y, label = df_plot['PRODUTO'].iloc[0])
plt.title('Histórico de Preço - ' + df_plot['ESTADO'].iloc[0])
plt.legend()
plt.show()
Podemos fazer um loop por região e estado e verificar a evoluçao dos preços da GASOLINA COMUM por REGIÃO e ESTADO.
regions = df_prices['REGIÃO'].unique()
for region in regions:
fig, ax = plt.subplots()
df_plot = df_prices[(df_prices['REGIÃO'] == region) & (df_prices['PRODUTO'] == 'GASOLINA COMUM')]
estados = df_plot['ESTADO'].unique()
for estado in estados:
df_plot_est = df_plot[(df_plot['ESTADO'] == estado)]
x = df_plot_est['DATA_INICIAL']
y = df_plot_est['PREÇO_MÉDIO_REVENDA']
ax.plot(x, y,
label = df_plot_est['ESTADO'].iloc[0],
alpha = 0.5)
plt.legend()
plt.title('PREÇO MÉDIO REVENDA - ' + df_plot['REGIÃO'].iloc[0] + ' - ' + df_plot['PRODUTO'].iloc[0])
plt.show()
Pelos gráficos acima podemos observar similaridade no comportamento das curvas entre os Estados, entretanto o preço médio praticado é diferente para cada região, sendo que o Norte apresentou os maiores preços de revenda. A título de exemplo temos o Estado do Acre com o maior pico de preço no segundo semestre de 2018 como resultado de um pico no preço do barril do petróleo.
Podemos observar que a política de Estado aparenta influenciar no preço médio de revenda dos combustíveis, dado que a partir de 2016 tivemos a entrada de um novo Governo com menor intervenção nos preços do petróleo (https://epbr.com.br/os-principios-e-as-distorcoes-da-politica-de-precos-dos-combustiveis/). Além disso notamos que o período de turbulência política aumentou bastante a volatilidade dos preços entre 2014 e 2016 (https://en.wikipedia.org/wiki/Impeachment_of_Dilma_Rousseff). Nos dias de hoje a Política adotada pela Petrobrás (https://petrobras.com.br/fatos-e-dados/adotamos-nova-politica-de-precos-de-diesel-e-gasolina.htm) permite maior flexibilidade na gestão comercial de derivados do petróleo, refletindo em curvas menos estáveis, acompanhando o preço internacional do pretróleo, como podemos notar através de inspeção visual (https://www.tradingview.com/symbols/OANDA-BCOUSD/).
from IPython.display import Image
PATH = "../../reports/figures/"
Image(filename = PATH + "oil_price.PNG")
Os dados da ANP com o histórico de preços de combustíveis nos permitiu observar diferenças importantes de preços médios entre os Estados do Brasil, denotando uma desigualdade regional. Adicionalmente podemos observar também que a política de preços mais intervencionista do Estado no período anterior a 2016 fazia com que o preço médio de revenda não acompanhasse a movimentação do preço do barril de petróleo. A partir de 2016, quando políticas mais liberalistas foram implementadas, foi possível observar que o preço médio praticado acompanhou melhor as movimentações do barril do petróleo, muito embora tenhamos notado uma curva com maior inclinação, indicando um aumento de preços mais agressivo do que o praticado internacionalmente.